<?php
    header("Content-type: text/html; charset=utf-8");
	require_once('dbconnect.inc.php');
	require_once('auth.inc.php');

	$auth = new auth();

	$auth->setDefRedir($_SERVER['PHP_SELF']);

	$user = $auth->isauth($dbh,$_COOKIE, false);

	if (!$user)
	{
		header($auth->getAuthRedir());	
		$cookie = $auth->getCookie();
		setcookie($cookie['name'], $cookie['value']);
		exit();
	}

?>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>

<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<meta http-equiv="X-UA-Compatible" content="IE=8" />
	<link rel="stylesheet" type="text/css" media="screen" href="css/monitor.css" />
	<link rel="stylesheet" type="text/css" media="screen" href="css/themes/redmond/jquery-ui-1.8.9.custom.css" />

	<script src="js/jquery-1.4.2.min.js" type="text/javascript"></script>
	<script src="js/i18n/grid.locale-ru.js" type="text/javascript"></script>
	<script src="js/jquery.jqGrid.min.js" type="text/javascript"></script>
	<script src="js/jquery-ui-1.8.9.custom.min.js" type="text/javascript"></script>
	<script type="text/javascript">

	var uid = <?php echo $user['uid']?>;

	function fz(_data)
	{
		return (_data == null) ? '' : _data;
	}

	function mysqlTimeStampToDate(timestamp) 
	{
    	var regex=/^([0-9]{2,4})-([0-1][0-9])-([0-3][0-9]) (?:([0-2][0-9]):([0-5][0-9]):([0-5][0-9]))?$/;
    	var parts=timestamp.replace(regex,"$1 $2 $3 $4 $5 $6").split(' ');
    	return new Date(parts[0],parts[1]-1,parts[2],parts[3],parts[4],parts[5]);
	}

	function lz(_val)
	{
  		return (parseInt(_val, 10) < 10) ? ( '0'+_val ) : _val;
	}

	function customDateFormat(_date)
	{
		if (_date == null)
		{
			return '';
		}
		else
		{
			var date = mysqlTimeStampToDate(_date);

			return lz(date.getDate())+'.'+lz(date.getMonth()+1)+'.'+date.getFullYear()+' '+
											  lz(date.getHours())+':'+lz(date.getMinutes())+':'+lz(date.getSeconds());
		}
	}

	function cancel_disp()
	{
		if (!confirm("Отменить диспетчерское управление ?"))
			return 

		var sel_cid = $('input[name=ccid]').val();	

		$.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param=0',
			function(data)
			{
				if (data['error'] != null)
				{
					alert("Ошибка отмены диспетческого управления: " + data['error']);
				}
				else
				{
					alert("Диспетчерское управление отменено !");
				}
			});
	}

	function show_detail()
	{
		var sel_cid = $('input[name=ccid]').val();

		if (sel_cid != "")
		{

			$.getJSON('req/con_rule.php?oper=info&cid=' + sel_cid, function(data)
						{

							var con_detail = '<div class="c-block">' +
												'<div class="c-header">' + 'Контроллер №' + data.c_id + '</div>' +
												'<div class="c-body">' + fz(data.location) + '</div>' +
												'<div class="c-body">Последний рескан:&nbsp<b>'+customDateFormat(data.cont_scan_time)+'</b></div>'+
												'<div class="c-body">Время контроллера:&nbsp<b>'+customDateFormat(data.cont_local_time)+'</b></div>'+
											'</div>'+
											'<div class="c-block">' +
												'<div class="c-header">Программа</div>' +
												'<div class="c-body">Загружена:&nbsp<b>'+customDateFormat(data.prog_load_time)+'</b></div>';

							if(data.prog_update_time != null)
							{
								con_detail += '<div class="c-body">Активирована:&nbsp<b>'+customDateFormat(data.prog_update_time)+'</b></div>';
							}

							switch(data.prog_update_status)
							{
								case '0':
									con_detail += '<div class="c-body">Статус:&nbsp<b>Загружена в базу.</b></div>';
								break
								case '1':
									con_detail += '<div class="c-body">Статус:&nbsp<span style="color:red"><b>Программа загружается.</b></span></div>';
								break
								case '3':
									con_detail += '<div class="c-body">Статус:&nbsp<b>Загружена в контроллер.</b></div>';
								break
								case '4':
									con_detail += '<div class="c-body">Статус:&nbsp<span style="color:red"><b>Ошибка загрузки</b></span></div>';
								break
								default:
									con_detail += '<div class="c-body">Статус:&nbsp<span style="color:red"><b>Неизвестное соcтояние</b></span></div>';
								break
							}
												
							con_detail += '</div>';

							if (((data.fault != null) && (data.fault != '0')) ||
								((data.no_program != null) && (data.no_program > 0)))
							{
                            	var problem_type = "Проблема";

								switch (data.fault)
								{
									case '1':
										problem_type = "Короткое замыкание";
									break;
									case '2':
										problem_type = "Перегрузка";
									break;
    								case '3':
										problem_type = "Недогрузка";
									break;
									case '4':
										problem_type = "Перегорел красный";
									break;
									case '5':
										problem_type = "Конфликт зеленых";
									break;
                            	}

                            	con_detail += '<div class="c-block">' +
												'<div class="c-header red">Проблемы</div>';

								if ((data.fault_red != null) && (data.fault_red > 0))
								{
									con_detail +=  '<div class="c-body red">' + problem_type +' направление: ' + data.fault_red +'</div>';
								}

								if ((data.fault_yellow != null) && (data.fault_yellow > 0))
								{
									con_detail +=  '<div class="c-body red">' + problem_type +' направление: ' + data.fault_yellow +'</div>';
								}

								if ((data.fault_green != null) && (data.fault_green > 0))
								{
									con_detail +=  '<div class="c-body red">' + problem_type +' направление: ' + data.fault_green +'</div>';
								}

								if ((data.no_program != null) && (data.no_program > 0))
								{
									con_detail +=  '<div class="c-body red">Нет программы в ОЗУ!</div>';
								}

								con_detail += '</div>';
							}

							var show_btn = ((data.job_mode != null) && <?php echo $user['rule'] == 0 ? 'false' : 'true'?>); 

							if (show_btn)
							{
								con_detail += '<div class="c-block">' +
											'<div class="c-header">Управление</div>'+
											'<div class="c-body">'+
											'<div id="button-box">'+
											'<button id="set-phase">Установить фазу</button>'+
											'<button id="set-program">Установить программу</button>'+
											'<button id="cancel-disp">Отменить управление</button>'+
											'</div>'+
											'</div>'+
											'</div>';
							}

							$('#right-info').html(con_detail);

							if (show_btn)
							{
								$("#set-phase").button().click(function() {	$( "#set-phase-form" ).dialog("open"); });
								$("#set-program").button().click(function() { $( "#set-prog-form" ).dialog("open"); });
								$("#cancel-disp").button().click(function() { cancel_disp(); });
							}

					});
			
		}
	}

	function select_cont()
	{
		var cid = $(this).find('.cid').html();

		$('input[name=ccid]').val(cid);

		$('.controller').removeClass('selected');
		$(this).addClass('selected');

		show_detail();
	}

	function fill_cont_list()
	{
		var gv = $('#group').val();

		if (gv == null)
			return;

		$.getJSON('req/con_rule.php?oper=all&gid=' + gv + '&uid=' + uid, function(data)
						{
							var all_cont = '<ul id="cont-list">'

							$.each(data, function(i, item)
								{
									var st_msg = '';
									var wclass = '';
									var add_ps = true;

									if (item.job_mode == null)
									{
										st_msg = '<div class="info"><b>Отключен</b></div>';
										wclass = "gray";
										add_ps = false;
									}
									else if (item.job_mode == 0)
									{
										st_msg = '<div class="info">';
									}
									else if (item.job_mode == 1)
									{
										st_msg = '<div class="info">Реж: <b>КУ</b> '
									}
									else if (item.job_mode == 2)
									{
										st_msg = '<div class="info">Реж: <b>ДР</b> '
									}
									else if (item.job_mode == 3)
									{
										st_msg = '<div class="info">Реж: <b>ВПУ</b> '
									}
									else if (item.job_mode == 4)
									{
										st_msg = '<div class="info">Реж: <b>ЗУ</b> '
									}
									else if (item.job_mode == 5)
									{
										st_msg = '<div class="info">Реж: <b>РУ</b>'
									}
									else
									{
										st_msg = '<div class="info"><b>Ошибка!</b></div>'
										wclass = "gray";
										add_ps = false;
									}
									
									if (add_ps)
									{
									  switch (item.prog_status)
									  {
										case '9':
										  st_msg += ' Прог: <span style="color:#ffae00"><b>ЖМ</b></span>';
										  break;
										case '10':
										  st_msg += ' Прог: <b>ОТКЛ</b>';
										  break;
										case '11':
										  st_msg += ' Прог: <span style="color:red"><b>КК</b></span>';
										  break;
										default:
										  st_msg += ' Прог: <b>'+item.prog_status +'</b>';
										  st_msg += ' Фаза: <b>'+item.phase+'</b></div>';
										  break;
									  }
									  
									}

									var sel_cid = $('input[name=ccid]').val();

									if (((item.fault != null) && (item.fault > 0)) ||
									   ((item.no_program != null) && item.no_program != 0))
									{
										wclass = "red"
									}

									if (sel_cid == item.c_id)
									{
										wclass += " selected";
									}

								  	all_cont += '<li id="cont-'+i+'" class="controller ' + wclass + '">'+
								  					'<div class="cid">' + item.c_id + '</div>'+
								  					'<div class="location">' + fz(item.location) + '</div>'+
								  					st_msg+ '</li>';
								});

							all_cont += '</ul>'

							$('#cnt-cont').html(all_cont);
							$('.controller').click(select_cont);
						}
		);

	}

	function update_clock()
	{
		var date = new Date();

		$('#clock').html(lz(date.getDate())+'.'+lz(date.getMonth()+1)+'.'+date.getFullYear()+' '+
											  lz(date.getHours())+':'+lz(date.getMinutes())+':'+lz(date.getSeconds()));
	}

    $(function() 
	{ 
		$.get('req/grp_opt.php?type=opt&uid=' + uid, 

		function(data)
		{
				$('#group').html('<option value="-1" selected >Все контроллеры</option>\n' + data + "</select>");
				fill_cont_list();
				show_detail();

		});

		$('#group').click(fill_cont_list);

		update_clock();

		setInterval(function()
		{

			fill_cont_list();
			show_detail();
			update_clock();

		}, 5000);

		$( "#set-phase-form" ).dialog({
			autoOpen: false,
			height: 150,
			width: 500,
			modal: true,
			resizable: false
		});

		$("button[id=set-phase-button]").each(function(index,data)
		{
			$(data).button().click(function() 
							{
								var phase = parseInt($(this).attr('phase'), 10) | 0x80;
								var sel_cid = $('input[name=ccid]').val();

								$( "#set-phase-form" ).dialog('close');

								if (phase != null)
								{
									$.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param='+phase,
											function(data)
											{
												if (data['error'] != null)
												{
													alert("Ошибка установки фазы: " + data['error']);
												}
												else
												{
													alert("Фаза установлена !");
												}
											});
								}
								else
								{
									alert("Ошибка установки фазы !");
								}
							});
		});

		$( "#set-prog-form" ).dialog({
			autoOpen: false,
			height: 250,
			width: 600,
			modal: true,
			resizable: false
		});

		$("button[id=set-prog-button]").each(function(index,data)
		{
			$(data).button().click(function() 
							{
								var prog = $(this).attr('prog');
								var sel_cid = $('input[name=ccid]').val();

								$( "#set-prog-form" ).dialog('close');

								if (prog == null)
									alert("Ошибка установки программы !");

								if ((prog >= 1) && (prog <=8))
								{

									$.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=sprog&param='+prog,
											function(data)
											{
												if (data['error'] != null)
												{
													alert("Ошибка установки программы: " + data['error']);
												}
												else
												{
													alert("Программа установлена !");
												}
											});
								}
								else if (prog == 9)
								{
									$.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param=143',
											function(data)
											{
												if (data['error'] != null)
												{
													alert("Ошибка установки программы: " + data['error']);
												}
												else
												{
													alert("Программа установлена !");
												}
											});
									
								}
								else if (prog == 10)
								{
									$.get('req/con_rule.php?oper=cmd&cid='+sel_cid+'&cmd=phase&param=142',
											function(data)
											{
												if (data['error'] != null)
												{
													alert("Ошибка установки ЖМ: " + data['error']);
												}
												else
												{
													alert("ЖМ установлено !");
												}
											});
								}
								else
								{
									alert("Неизвестный код ошибки !");
								}

							});
							
		});


		$('#exit-button').button().click(
			function () {
				if (confirm('Выйти из монитора ?'))
				{
					top.location.href="logout.php";
				}

			}
		);

		$('#admin-button').button().click(function() { top.location.href="cmap.php" });
	});

	</script>
</head>

<body id="monitor-body">

	<div id="set-phase-form" title="Установить фазу">
		<form id="set-phase-form" action="javascript:void(0)">
			<button id="set-phase-button" phase="1">Фаза 1</button>			
			<button id="set-phase-button" phase="2">Фаза 2</button>			
			<button id="set-phase-button" phase="3">Фаза 3</button>			
			<button id="set-phase-button" phase="4">Фаза 4</button>			
			<button id="set-phase-button" phase="5">Фаза 5</button>			
			<button id="set-phase-button" phase="6">Фаза 6</button>			
			<button id="set-phase-button" phase="7">Фаза 7</button>			
			<button id="set-phase-button" phase="8">Фаза 8</button>			
		</form>
	</div>

	<div id="set-prog-form" title="Установить программу">
		<form id="set-prog-form" action="javascript:void(0)">
			<button id="set-prog-button" prog="1">Программа 1</button>			
			<button id="set-prog-button" prog="2">Программа 2</button>			
			<button id="set-prog-button" prog="3">Программа 3</button>			
			<button id="set-prog-button" prog="4">Программа 4</button>			
			<button id="set-prog-button" prog="5">Программа 5</button>			
			<button id="set-prog-button" prog="6">Программа 6</button>			
			<button id="set-prog-button" prog="7">Программа 7</button>			
			<button id="set-prog-button" prog="8">Программа 8</button>
			<button id="set-prog-button" prog="9">Отключить</button>
			<button id="set-prog-button" prog="10">ЖМ</button>
		</form>
	</div>

	<div id="top-menu">	
		<form id="group-form">
			<label for="group">Группа контроллеров: </label>
			<select id="group">
			</select>

			<input type="hidden" name="ccid" id="ccid" value=''>

		</form>
		<div id="user-info">Оператор: <?php echo $user['name']?></div>
		<div id="top-button-box">
		<?php
			if ($user['type'] == 1)
			{
			?>
				<button id="admin-button">Администрирование</button>
			<?php
			}
		?>
			<button id="exit-button">Выход</button>
		</div>

		<div id="clock"></div>
	</div>

	<div id="right-info">

	</div>
	<div id="cnt-cont">
	</div>
	<div id="bottom-info">
	</div>
</body>
</html>
